package com.butang.code.doublePointer;

/**
 * ClassName: LeetCode283
 * Package: com.butang.code.doublePointer
 * Description:
 *283. 移动零
 *
 * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
 *
 * 请注意 ，必须在不复制数组的情况下原地对数组进行操作。
 *
 *
 *
 * 示例 1:
 *
 * 输入: nums = [0,1,0,3,12]
 * 输出: [1,3,12,0,0]
 * 示例 2:
 *
 * 输入: nums = [0]
 * 输出: [0]
 *
 *
 * 提示:
 *
 * 1 <= nums.length <= 104
 * -231 <= nums[i] <= 231 - 1
 *
 *
 * 进阶：你能尽量减少完成的操作次数吗？
 *
 * 输入
 * nums =
 * [0,1,0,3,12]
 *
 * @Author BuTang
 * @Create 2024/3/27 16:21
 * @Version 1.0
 */
public class LeetCode283 {
    public static void main(String[] args) {
        int[] nums = new int[]{0,1,0,12,3};

//        方案一
        int left=0 , right=0 , n=nums.length-1;
        while (right <= n){
            if (nums[right] != 0){
                exchangeLocation(nums,left,right);
                left++;
            }
            right++;
        }

//        方案二
//        int index = 0;
//        for (int num:nums) {
//            if (num != 0){
//                nums[index++] = num;
//            }
//        }
//
//        for (int i = index; i < nums.length; i++) {
//            nums[i] = 0 ;
//        }
//
        for (int i = 0; i < nums.length; i++) {
            System.out.println(nums[i]);
        }
    }
    public static void exchangeLocation(int[] nums, int left, int right){
        int temp = nums[left];
        nums[left] = nums[right];
        nums[right] = temp ;
    }
}
